<?php

/**
 * Alumno filter form para usar en forma embebida (como en SolicitudFilterForm)
 * 
 * El filtro principal debe embeberlo en su configure():
     public function configure()
     {
       $this->EmbedForm('alumno', new EmbeddedAlumnoFormFilter());
     }
 
 * y permitirle procesar sus campos:
     public function addAlumnoColumnQuery(Doctrine_Query $query, $field, $values)
     { 
       $this->getEmbeddedForm('alumno')
              ->addAlumnoFieldsQuery($query, $field, $values);
     }
 
 * Para que se mantengan los widgets con los valores usados en la busqueda,
 * en el action del módulo que utiliza al filtro principal se debe redefinir:
     protected function buildQuery(){
       $qry = parent::buildQuery();    
       $filtros = $this->getFilters();
       if(isset($filtros['alumno']))
          $this->filters->setDefault('alumno', $filtros['alumno']);        
       return $qry;
     }

 * Para aplicar algún filtro por defecto, en el lib/<module>GeneratorConfiguration.class.php
 * del módulo que lo embebe, definir:
  
    public function getFilterDefaults()
    { 
      return array(
               'campoFiltroPrincipal' => 'valor1',
               'alumno' => array(
                            'sede_id' => '1'
                           )
      );
    }

 * @package    BecArTe
 * @subpackage filter
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormFilterTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class embeddedAlumnoFormFilter extends AlumnoFormFilter
{
  public function configure()
  {
    $user = sfContext::getInstance()->getUser();
    $this->useFields(array('tipo_doc_id','documento','apellido','nombre','sede_id'));    
    $this->widgetSchema['sede_id']->setOption('order_by', array('nombre', 'ASC'));
  }  

  /* Los formularios que lo embeben lo invocan en su addAlumnoColumnQuery()
   * así no repetimos este código en todos  */
  public function addAlumnoFieldsQuery(Doctrine_Query $query, $field, $values)
  {  
    if(is_array($values)) {   
      if(count($completos = $this->filtrarParametros($values))) {
        /* por defecto usan 'r' como rootAlias, lo cambio para no chocar con
         * la principal que lo embebe */
        $this->setQuery( 
                $this->getTable()->createQuery('a')
              );
        $query->andWhere(
              $query->getRootAlias().'.alumno_id IN ('.
                $this->buildQuery($values)
                       ->from('alumno a')
                       ->select('a.id')
                .')', $completos
              );
      }
    }
  }

  /* Procesa los criterios del filtro devolviendo sólo aquellos con valor,
   * Usa getFields para devolverlos en el mismo orden, así se pasan en
   * el orden correcto al ejecutar la qry
   */
  protected function filtrarParametros($values) 
  {
    $completos=array();
    foreach($this->getFields() as $field => $type) {
      if(isset($values[$field])) {
        $val = $values[$field]['text'];
        if( ($val != null) && (count($val)>0) ){
          $completos[] = $val . (($type == 'Text') ? '%' : '');
        }
      } 
    }
    return $completos;
  }


}

  
